package com.cskaoyan.javase.oop1._12anonymous;

/**
 * 匿名对象,没有名字的对象,对于对象来说,引用是它的"名字"
 * 所以匿名对象就是没有引用指向它的对象
 *
 * 匿名对象的语法:
 *      new 类名(实参列表);
 *
 * 匿名对象的用法:
 *      由于没有引用指向匿名对象,所以匿名对象必须在创建的时候直接使用
 *      直接"new 类名(实参列表)点"使用该对象
 *
 * 匿名对象的使用场景:
 *      1.直接调用方法或者访问成员变量
 *      2.在方法中使用
 *          a.作为方法的返回值
 *          b.作为方法的实参传入方法
 *
 * 匿名对象的优缺点:
 *     优点:方便快捷,并且理论上来说,匿名对象使用完毕后就会成为垃圾,会更早被释放内存
 *          提升内存的使用效率
 *     缺点:一次性的
 *
 *     综上,如果有一次使用某个对象,为了方便快捷,可以使用匿名对象
 *     但是如果一个对象多次被使用,仍然使用匿名对象就得不偿失了
 *
 *
 * @since 09:56
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // Animal a = new Animal();
        // a.shout();
        // new Animal().shout();

        Animal a = getAnimalInstance();
        a.shout();

        Animal a2 = new Animal();
        testShout(a2);

        testShout(new Animal());

    }

    // 获取动物对象
    public static Animal getAnimalInstance() {
        /*Animal a = new Animal();
        return a;*/
        // 二合一
        return new Animal();
    }

    public static void testShout(Animal a){
        a.shout();
    }
}

class Animal {
    public void shout() {
        System.out.println("嗷嗷叫!");
    }
}